home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wayzata's Best of Shareware PC/Windows 1
/
Wayzata's Best of Shareware for PC-Windows - Release 1 - Wayzata Technology (1993).iso
/
mac
/
WINDOWS
/
MISCUTIL
/
RSGAGE13
/
CONFIG.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-08-23
|
10KB
|
332 lines
// ============================================================================
// config.c -- dialog procedure and support functions for the "Configure..."
// dialog box.
// ============================================================================
#include <windows.h>
#include <commdlg.h>
#include "resgauge.h"
// ============================================================================
// > > > > > > > > > > > > > > > code begins < < < < < < < < < < < < < < < <
// ============================================================================
// Processes messages for the "Configure..." dialog box.
// ----------------------------------------------------------------------------
BOOL
CALLBACK
ConfigDlgProc(
HWND hDlg, // window handle of the dialog
UINT msg, // message type
WPARAM wParam, // 16 bits of information
LPARAM lParam) // 32 additional bits of information
{
static CONFIG Sconfig;
BOOL fReturn;
fReturn = FALSE;
switch ( msg )
{
case WM_INITDIALOG:
// make a local copy of the global configuration data
Sconfig = GcfgCur;
// initialize the configuration dialog
InitConfigDlg(hDlg);
// tell DefDlgProc() that this message was handled
fReturn = TRUE;
break;
// private message to reset the edit control
case WM_REVERT:
SetDlgItemInt(hDlg, IDD_PERCENT, GcfgCur.wThreshold, FALSE);
break;
case WM_COMMAND:
fReturn = ConfigCommand(hDlg, &Sconfig, wParam, lParam);
break;
}
return(fReturn);
} // ConfigDlgProc
// ----------------------------------------------------------------------------
// Initializes the configuration dialog.
// ----------------------------------------------------------------------------
void
FAR
PASCAL
InitConfigDlg(
HWND hDlg) // window handle of the dialog
{
int i;
HFONT hFont;
WORD wTmp;
// center the dialog
CenterDialog(hDlg);
// set the font of the text boxes
hFont = GetStockObject(ANSI_VAR_FONT);
SendDlgItemMessage(hDlg, IDOK, WM_SETFONT, (WPARAM) hFont, FALSE);
SendDlgItemMessage(hDlg, IDCANCEL, WM_SETFONT, (WPARAM) hFont, FALSE);
for ( i = IDD_USER; i <= LAST_CONFIG; ++i )
SendDlgItemMessage(hDlg, i, WM_SETFONT, (WPARAM) hFont, FALSE);
// set the "Monitor" radio buttons
if ( GcfgCur.wMonitor == MONITOR_GDI )
wTmp = IDD_GDI;
else if ( GcfgCur.wMonitor == MONITOR_USER )
wTmp = IDD_USER;
else
wTmp = IDD_BOTH;
CheckRadioButton(hDlg, IDD_USER, IDD_BOTH, wTmp);
// set the "Alarm" radio buttons
if ( GcfgCur.wAlarmType == ALARM_FLASH )
wTmp = IDD_FLASH;
else
wTmp = IDD_BEEP;
CheckRadioButton(hDlg, IDD_BEEP, IDD_FLASH, wTmp);
// load the edit control with the threshold value
SetDlgItemInt(hDlg, IDD_PERCENT, GcfgCur.wThreshold, FALSE);
// limit the edit control to 2 characters
SendDlgItemMessage(hDlg, IDD_PERCENT, EM_LIMITTEXT, 2, 0L);
// enable or disable the alarm controls
EnableAlarmControls(hDlg, GcfgCur.fAlarmEnabled);
} // InitConfigDlg
// ----------------------------------------------------------------------------
// Handles WM_COMMAND messages to the configuration dialog.
// ----------------------------------------------------------------------------
BOOL
FAR
PASCAL
ConfigCommand(
HWND hDlg, // window handle of the dialog
PCONFIG pConfig, // configuration structure in caller
WPARAM wParam, // 16 bits of information
LPARAM lParam) // 32 additional bits of information
{
BOOL fEnable;
BOOL fNoError;
BOOL fReturn;
DWORD FAR * lpdwTmp;
WORD wTmp;
fReturn = FALSE;
switch ( wParam )
{
// monitor the GDI heap
case IDD_GDI:
CheckRadioButton(hDlg, IDD_USER, IDD_BOTH, wParam);
GwFree = 0;
GcfgCur.wMonitor = MONITOR_GDI;
break;
// monitor the USER heap
case IDD_USER:
CheckRadioButton(hDlg, IDD_USER, IDD_BOTH, wParam);
GwFree = 0;
GcfgCur.wMonitor = MONITOR_USER;
break;
// monitor both heaps
case IDD_BOTH:
CheckRadioButton(hDlg, IDD_USER, IDD_BOTH, wParam);
GwFree = 0;
GcfgCur.wMonitor = MONITOR_BOTH;
break;
// edit the gauge color
case IDD_GAUGE_COLOR:
if ( GcfgCur.wMonitor == MONITOR_GDI )
lpdwTmp = &(GcfgCur.dwColorGDI);
else if ( GcfgCur.wMonitor == MONITOR_USER )
lpdwTmp = &(GcfgCur.dwColorUser);
else
lpdwTmp = &(GcfgCur.dwColorBoth);
if ( DoColor(hDlg, lpdwTmp) )
GwFree = 0;
break;
// toggle the alarm
case IDD_ENABLE:
fEnable = LOWORD(SendDlgItemMessage(hDlg,
wParam,
BM_GETCHECK,
0,
0L));
GcfgCur.fAlarmEnabled = !fEnable;
EnableAlarmControls(hDlg, GcfgCur.fAlarmEnabled);
break;
// beep for an alarm
case IDD_BEEP:
CheckRadioButton(hDlg, IDD_BEEP, IDD_FLASH, wParam);
GcfgCur.wAlarmType = ALARM_BEEP;
break;
// flash for an alarm
case IDD_FLASH:
CheckRadioButton(hDlg, IDD_BEEP, IDD_FLASH, wParam);
GcfgCur.wAlarmType = ALARM_FLASH;
break;
// decrement the threshold value
case IDD_MINUS:
wTmp = GetDlgItemInt(hDlg, IDD_PERCENT, NULL, FALSE);
if ( wTmp > 1 )
{
--wTmp;
SetDlgItemInt(hDlg, IDD_PERCENT, wTmp, FALSE);
GcfgCur.wThreshold = wTmp;
}
else
{
MessageBeep(0);
}
break;
// check the value entered in the edit control
case IDD_PERCENT:
if ( HIWORD(lParam) == EN_CHANGE )
{
wTmp = GetDlgItemInt(hDlg,
IDD_PERCENT,
(BOOL FAR *) &fNoError,
FALSE);
if ( fNoError )
{
GcfgCur.wThreshold = wTmp;
}
else
{
MessageBeep(0);
PostMessage(hDlg, WM_REVERT, 0, 0L);
}
}
break;
// increment the threshold value
case IDD_PLUS:
wTmp = GetDlgItemInt(hDlg, IDD_PERCENT, NULL, FALSE);
if ( wTmp < 99 )
{
++wTmp;
SetDlgItemInt(hDlg, IDD_PERCENT, wTmp, FALSE);
GcfgCur.wThreshold = wTmp;
}
else
{
MessageBeep(0);
}
break;
// save and use the current configuration
case IDOK:
SaveConfig();
EndDialog(hDlg, TRUE);
fReturn = TRUE;
break;
// use the current configuration
case IDD_APPLY:
EndDialog(hDlg, TRUE);
fReturn = TRUE;
break;
// reset the current configuration to default values
case IDD_DEFAULT:
GcfgCur = GcfgDef;
GwFree = 0;
InitConfigDlg(hDlg);
break;
// restore the original configuration
case IDCANCEL:
GcfgCur = *pConfig;
GwFree = 0;
EndDialog(hDlg, FALSE);
fReturn = TRUE;
break;
}
return(fReturn);
} // ConfigCommand
// ----------------------------------------------------------------------------
// Enables or disables all the alarm controls.
// ----------------------------------------------------------------------------
void
FAR
PASCAL
EnableAlarmControls(
HWND hDlg, // window handle of the dialog
BOOL fEnable) // TRUE if the controls are to be enabled
{
int i;
SendDlgItemMessage(hDlg, IDD_ENABLE, BM_SETCHECK, fEnable, 0L);
for ( i = IDD_BEEP; i <= IDD_THRESHOLD; ++i )
EnableWindow(GetDlgItem(hDlg, i), fEnable);
for ( i = IDD_MINUS; i <= IDD_PLUS; ++i )
EnableWindow(GetDlgItem(hDlg, i), fEnable);
} // EnableAlarmControls
// ----------------------------------------------------------------------------
// Wrapper for the common color selection dialog.
// ----------------------------------------------------------------------------
BOOL
FAR
PASCAL
DoColor(
HWND hWnd, // window handle
DWORD FAR * lpdwColor) // color to be modified
{
int i;
BOOL fReturn;
CHOOSECOLOR cc;
COLORREF aclrCust[16];
// assume failure
fReturn = FALSE;
// set the custom color controls to white
for ( i = 0; i < 16; ++i )
aclrCust[i] = RGB(255, 255, 255);
// initialize the structure members
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hWnd;
cc.hInstance = NULL;
cc.rgbResult = *lpdwColor;
cc.lpCustColors = aclrCust;
cc.Flags = CC_RGBINIT | CC_PREVENTFULLOPEN;
cc.lCustData = 0;
cc.lpfnHook = NULL;
cc.lpTemplateName = NULL;
// call the common color selection dialog
if ( ChooseColor(&cc) )
{
*lpdwColor = cc.rgbResult;
fReturn = TRUE;
}
return(fReturn);
} // DoColor
// ===============
// end of config.c
// ===============